package model

import "statsphere/pb"

type ReverseCtrlStruct struct {
	Type    string               `json:"type"`    // W
	Time    int64                `json:"time"`    //
	Timeout int                  `json:"timeout"` //
	ReqId   string               `json:"reqId"`   //
	GwId    string               `json:"gwId"`    //
	RuleId  string               `json:"ruleId"`  //
	Data    []*ReverseDataStruct `json:"data"`    //
}

type ReverseDataStruct struct {
	CInsId  string `json:"cInsId"`
	PtInsId string `json:"ptInsId"`
	PtId    string `json:"ptId"`
	Addr    string `json:"addr"`
	Val     string `json:"val"`
	Retry   string `json:"retry"`
	OnErr   string `json:"onErr"`
}

type CtrlResultStruct struct {
	RespId string            `json:"respId"`
	Result string            `json:"result"`
	Time   int64             `json:"time"`
	Data   []*CtrlDataStruct `json:"data"` //
}

type CtrlDataStruct struct {
	PtId   string `json:"ptId"`   //
	Result string `json:"result"` // "result": "suc" "result": "err",
	Val    string `json:"val"`    // 成功时候会有
	Msg    string `json:"msg"`    // 失败时候会有
	// CInsId string `json:"cInsId"`
}

func (a *ReverseCtrlStruct) GetPtIds() []string {
	if len(a.Data) == 0 {
		return make([]string, 0)
	}
	arr := make([]string, 0, len(a.Data))
	for _, t := range a.Data {
		arr = append(arr, t.PtId)
	}
	return arr
}

func (a *CtrlResultStruct) GetPtIds() ([]string, []*pb.ErrItem) {

	arr := make([]string, 0, len(a.Data))
	errs := make([]*pb.ErrItem, 0, len(a.Data))

	if len(a.Data) == 0 {
		return arr, errs
	}
	for _, t := range a.Data {
		arr = append(arr, t.PtId)
		if t.Result != "suc" {
			errs = append(errs, &pb.ErrItem{PtId: t.PtId, Msg: t.Msg})
		}
	}
	return arr, errs
}
